package com.storm.lib.template;

import java.util.Collection;

import org.apache.mina.core.session.IoSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

import com.storm.lib.type.OrderType;

/**
 * 
 * 类功能:推送模板
 * @author johnny
 * @version 2011-8-7
 */
@Controller
public class PushTemplate {

	@Autowired
	private SystemTemplate systemTemplate;
	@Autowired
	private RoleTemplate roleTemplate;
	/**
	 * 
	 * 方法功能:推送到角色
	 * 更新时间:2011-8-7, 作者:johnny
	 * @param order
	 * @param iuid
	 * @param data
	 */
	public void pushRequestToRole(Integer orderNumber,String iuid,Object[] data){
		IoSession ioSession = roleTemplate.getSessionByIuid(iuid);
		pushRequestToSession(orderNumber,data, ioSession);
	}

	
	/**
	 * 
	 * 方法功能:推送到角色
	 * 更新时间:2011-8-7, 作者:johnny
	 * @param order
	 * @param iuid
	 * @param data
	 */
	public void pushRequestToRole(String orderStr,String iuid,Object[] data){
		IoSession ioSession = roleTemplate.getSessionByIuid(iuid);
		pushRequestToSession(systemTemplate.fetchOrderId(orderStr),data, ioSession);
	}
	
	public void pushRequestToSession(Integer orderNumber,Object[] data, IoSession ioSession) {
		if(ioSession==null){
			return;
		}		
		Object[] returnData =null;
		returnData = new Object[2];
		returnData[0] = orderNumber;			
		returnData[1] = data;	
		ioSession.write(returnData);
	}
	
	/**
	 * 
	 * 方法功能:推送到角色
	 * 更新时间:2011-8-7, 作者:johnny
	 * @param order
	 * @param iuid
	 * @param data
	 */
	public void pushToAllOnline(String order,Object[] data){
		Collection<IoSession> colls = roleTemplate.getAllSession();
		for (IoSession ioSession : colls) {
			pushRequestToSession(systemTemplate.fetchOrderId(order),data, ioSession);
		}
	}

	/**
	 * 
	 * 方法功能:推送到角色
	 * 更新时间:2011-8-7, 作者:johnny
	 * @param order
	 * @param iuid
	 * @param data
	 */
	public void pushArrayToRole(String iuid,Object[] data){
		IoSession ioSession = roleTemplate.getSessionByIuid(iuid);
		pushMapToSession(data, ioSession);
	}

	public void pushMapToSession(Object[] data, IoSession ioSession) {
		if(ioSession==null){
			return;
		}
		Object[] objs = new Object[2];
		objs[0] = OrderType.ORDER_MAP;
		objs[1]  = data;
		ioSession.write(objs);
	}


	/**
	 * 
	 * 方法功能:推送字符串到Session
	 * 更新时间:2011-8-7, 作者:johnny
	 * @param order
	 * @param iuid
	 * @param data
	 */
	public void pushMessageToAllSession(String[] messages){
		Collection<IoSession> colls = roleTemplate.getAllSession();
		for (IoSession ioSession : colls) {
			pushChatToSession(messages, ioSession);
		}
	}
	
	/**
	 * 
	 * 方法功能:推送字符串到Session
	 * 更新时间:2011-8-7, 作者:johnny
	 * @param order
	 * @param iuid
	 * @param data
	 */
	public void pushChatToSession(String[] messages,IoSession ioSession){
		if(ioSession==null){
			return;
		}	

		Object[] objs = new Object[2];
		objs[0] = OrderType.ORDER_CHAT;
		objs[1]  = messages;
		ioSession.write(objs);
	}


}
